home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / bluetooth / hci.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-11-11  |  45.8 KB  |  1,843 lines

  1. /*
  2.  *
  3.  *  BlueZ - Bluetooth protocol stack for Linux
  4.  *
  5.  *  Copyright (C) 2000-2001  Qualcomm Incorporated
  6.  *  Copyright (C) 2002-2003  Maxim Krasnyansky <maxk@qualcomm.com>
  7.  *  Copyright (C) 2002-2008  Marcel Holtmann <marcel@holtmann.org>
  8.  *
  9.  *
  10.  *  This program is free software; you can redistribute it and/or modify
  11.  *  it under the terms of the GNU General Public License as published by
  12.  *  the Free Software Foundation; either version 2 of the License, or
  13.  *  (at your option) any later version.
  14.  *
  15.  *  This program is distributed in the hope that it will be useful,
  16.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  *  GNU General Public License for more details.
  19.  *
  20.  *  You should have received a copy of the GNU General Public License
  21.  *  along with this program; if not, write to the Free Software
  22.  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  23.  *
  24.  */
  25.  
  26. #ifndef __HCI_H
  27. #define __HCI_H
  28.  
  29. #ifdef __cplusplus
  30. extern "C" {
  31. #endif
  32.  
  33. #include <sys/socket.h>
  34.  
  35. #define HCI_MAX_DEV    16
  36.  
  37. #define HCI_MAX_ACL_SIZE    1024
  38. #define HCI_MAX_SCO_SIZE    255
  39. #define HCI_MAX_EVENT_SIZE    260
  40. #define HCI_MAX_FRAME_SIZE    (HCI_MAX_ACL_SIZE + 4)
  41.  
  42. /* HCI dev events */
  43. #define HCI_DEV_REG    1
  44. #define HCI_DEV_UNREG    2
  45. #define HCI_DEV_UP    3
  46. #define HCI_DEV_DOWN    4
  47. #define HCI_DEV_SUSPEND    5
  48. #define HCI_DEV_RESUME    6
  49.  
  50. /* HCI device types */
  51. #define HCI_VIRTUAL    0
  52. #define HCI_USB        1
  53. #define HCI_PCCARD    2
  54. #define HCI_UART    3
  55. #define HCI_RS232    4
  56. #define HCI_PCI        5
  57. #define HCI_SDIO    6
  58.  
  59. /* HCI device flags */
  60. enum {
  61.     HCI_UP,
  62.     HCI_INIT,
  63.     HCI_RUNNING,
  64.  
  65.     HCI_PSCAN,
  66.     HCI_ISCAN,
  67.     HCI_AUTH,
  68.     HCI_ENCRYPT,
  69.     HCI_INQUIRY,
  70.  
  71.     HCI_RAW,
  72.  
  73.     HCI_SECMGR
  74. };
  75.  
  76. /* HCI ioctl defines */
  77. #define HCIDEVUP    _IOW('H', 201, int)
  78. #define HCIDEVDOWN    _IOW('H', 202, int)
  79. #define HCIDEVRESET    _IOW('H', 203, int)
  80. #define HCIDEVRESTAT    _IOW('H', 204, int)
  81.  
  82. #define HCIGETDEVLIST    _IOR('H', 210, int)
  83. #define HCIGETDEVINFO    _IOR('H', 211, int)
  84. #define HCIGETCONNLIST    _IOR('H', 212, int)
  85. #define HCIGETCONNINFO    _IOR('H', 213, int)
  86. #define HCIGETAUTHINFO    _IOR('H', 215, int)
  87.  
  88. #define HCISETRAW    _IOW('H', 220, int)
  89. #define HCISETSCAN    _IOW('H', 221, int)
  90. #define HCISETAUTH    _IOW('H', 222, int)
  91. #define HCISETENCRYPT    _IOW('H', 223, int)
  92. #define HCISETPTYPE    _IOW('H', 224, int)
  93. #define HCISETLINKPOL    _IOW('H', 225, int)
  94. #define HCISETLINKMODE    _IOW('H', 226, int)
  95. #define HCISETACLMTU    _IOW('H', 227, int)
  96. #define HCISETSCOMTU    _IOW('H', 228, int)
  97.  
  98. #define HCISETSECMGR    _IOW('H', 230, int)
  99.  
  100. #define HCIINQUIRY    _IOR('H', 240, int)
  101.  
  102. #ifndef __NO_HCI_DEFS
  103.  
  104. /* HCI Packet types */
  105. #define HCI_COMMAND_PKT        0x01
  106. #define HCI_ACLDATA_PKT        0x02
  107. #define HCI_SCODATA_PKT        0x03
  108. #define HCI_EVENT_PKT        0x04
  109. #define HCI_VENDOR_PKT        0xff
  110.  
  111. /* HCI Packet types */
  112. #define HCI_2DH1    0x0002
  113. #define HCI_3DH1    0x0004
  114. #define HCI_DM1        0x0008
  115. #define HCI_DH1        0x0010
  116. #define HCI_2DH3    0x0100
  117. #define HCI_3DH3    0x0200
  118. #define HCI_DM3        0x0400
  119. #define HCI_DH3        0x0800
  120. #define HCI_2DH5    0x1000
  121. #define HCI_3DH5    0x2000
  122. #define HCI_DM5        0x4000
  123. #define HCI_DH5        0x8000
  124.  
  125. #define HCI_HV1        0x0020
  126. #define HCI_HV2        0x0040
  127. #define HCI_HV3        0x0080
  128.  
  129. #define HCI_EV3        0x0008
  130. #define HCI_EV4        0x0010
  131. #define HCI_EV5        0x0020
  132. #define HCI_2EV3    0x0040
  133. #define HCI_3EV3    0x0080
  134. #define HCI_2EV5    0x0100
  135. #define HCI_3EV5    0x0200
  136.  
  137. #define SCO_PTYPE_MASK    (HCI_HV1 | HCI_HV2 | HCI_HV3)
  138. #define ACL_PTYPE_MASK    (HCI_DM1 | HCI_DH1 | HCI_DM3 | HCI_DH3 | HCI_DM5 | HCI_DH5)
  139.  
  140. /* HCI Error codes */
  141. #define HCI_UNKNOWN_COMMAND            0x01
  142. #define HCI_NO_CONNECTION            0x02
  143. #define HCI_HARDWARE_FAILURE            0x03
  144. #define HCI_PAGE_TIMEOUT            0x04
  145. #define HCI_AUTHENTICATION_FAILURE        0x05
  146. #define HCI_PIN_OR_KEY_MISSING            0x06
  147. #define HCI_MEMORY_FULL                0x07
  148. #define HCI_CONNECTION_TIMEOUT            0x08
  149. #define HCI_MAX_NUMBER_OF_CONNECTIONS        0x09
  150. #define HCI_MAX_NUMBER_OF_SCO_CONNECTIONS    0x0a
  151. #define HCI_ACL_CONNECTION_EXISTS        0x0b
  152. #define HCI_COMMAND_DISALLOWED            0x0c
  153. #define HCI_REJECTED_LIMITED_RESOURCES        0x0d
  154. #define HCI_REJECTED_SECURITY            0x0e
  155. #define HCI_REJECTED_PERSONAL            0x0f
  156. #define HCI_HOST_TIMEOUT            0x10
  157. #define HCI_UNSUPPORTED_FEATURE            0x11
  158. #define HCI_INVALID_PARAMETERS            0x12
  159. #define HCI_OE_USER_ENDED_CONNECTION        0x13
  160. #define HCI_OE_LOW_RESOURCES            0x14
  161. #define HCI_OE_POWER_OFF            0x15
  162. #define HCI_CONNECTION_TERMINATED        0x16
  163. #define HCI_REPEATED_ATTEMPTS            0x17
  164. #define HCI_PAIRING_NOT_ALLOWED            0x18
  165. #define HCI_UNKNOWN_LMP_PDU            0x19
  166. #define HCI_UNSUPPORTED_REMOTE_FEATURE        0x1a
  167. #define HCI_SCO_OFFSET_REJECTED            0x1b
  168. #define HCI_SCO_INTERVAL_REJECTED        0x1c
  169. #define HCI_AIR_MODE_REJECTED            0x1d
  170. #define HCI_INVALID_LMP_PARAMETERS        0x1e
  171. #define HCI_UNSPECIFIED_ERROR            0x1f
  172. #define HCI_UNSUPPORTED_LMP_PARAMETER_VALUE    0x20
  173. #define HCI_ROLE_CHANGE_NOT_ALLOWED        0x21
  174. #define HCI_LMP_RESPONSE_TIMEOUT        0x22
  175. #define HCI_LMP_ERROR_TRANSACTION_COLLISION    0x23
  176. #define HCI_LMP_PDU_NOT_ALLOWED            0x24
  177. #define HCI_ENCRYPTION_MODE_NOT_ACCEPTED    0x25
  178. #define HCI_UNIT_LINK_KEY_USED            0x26
  179. #define HCI_QOS_NOT_SUPPORTED            0x27
  180. #define HCI_INSTANT_PASSED            0x28
  181. #define HCI_PAIRING_NOT_SUPPORTED        0x29
  182. #define HCI_TRANSACTION_COLLISION        0x2a
  183. #define HCI_QOS_UNACCEPTABLE_PARAMETER        0x2c
  184. #define HCI_QOS_REJECTED            0x2d
  185. #define HCI_CLASSIFICATION_NOT_SUPPORTED    0x2e
  186. #define HCI_INSUFFICIENT_SECURITY        0x2f
  187. #define HCI_PARAMETER_OUT_OF_RANGE        0x30
  188. #define HCI_ROLE_SWITCH_PENDING            0x32
  189. #define HCI_SLOT_VIOLATION            0x34
  190. #define HCI_ROLE_SWITCH_FAILED            0x35
  191. #define HCI_EIR_TOO_LARGE            0x36
  192. #define HCI_SIMPLE_PAIRING_NOT_SUPPORTED    0x37
  193. #define HCI_HOST_BUSY_PAIRING            0x38
  194.  
  195. /* ACL flags */
  196. #define ACL_CONT        0x01
  197. #define ACL_START        0x02
  198. #define ACL_ACTIVE_BCAST    0x04
  199. #define ACL_PICO_BCAST        0x08
  200.  
  201. /* Baseband links */
  202. #define SCO_LINK    0x00
  203. #define ACL_LINK    0x01
  204. #define ESCO_LINK    0x02
  205.  
  206. /* LMP features */
  207. #define LMP_3SLOT    0x01
  208. #define LMP_5SLOT    0x02
  209. #define LMP_ENCRYPT    0x04
  210. #define LMP_SOFFSET    0x08
  211. #define LMP_TACCURACY    0x10
  212. #define LMP_RSWITCH    0x20
  213. #define LMP_HOLD    0x40
  214. #define LMP_SNIFF    0x80
  215.  
  216. #define LMP_PARK    0x01
  217. #define LMP_RSSI    0x02
  218. #define LMP_QUALITY    0x04
  219. #define LMP_SCO        0x08
  220. #define LMP_HV2        0x10
  221. #define LMP_HV3        0x20
  222. #define LMP_ULAW    0x40
  223. #define LMP_ALAW    0x80
  224.  
  225. #define LMP_CVSD    0x01
  226. #define LMP_PSCHEME    0x02
  227. #define LMP_PCONTROL    0x04
  228. #define LMP_TRSP_SCO    0x08
  229. #define LMP_BCAST_ENC    0x80
  230.  
  231. #define LMP_EDR_ACL_2M    0x02
  232. #define LMP_EDR_ACL_3M    0x04
  233. #define LMP_ENH_ISCAN    0x08
  234. #define LMP_ILACE_ISCAN    0x10
  235. #define LMP_ILACE_PSCAN    0x20
  236. #define LMP_RSSI_INQ    0x40
  237. #define LMP_ESCO    0x80
  238.  
  239. #define LMP_EV4        0x01
  240. #define LMP_EV5        0x02
  241. #define LMP_AFH_CAP_SLV    0x08
  242. #define LMP_AFH_CLS_SLV    0x10
  243. #define LMP_EDR_3SLOT    0x80
  244.  
  245. #define LMP_EDR_5SLOT    0x01
  246. #define LMP_SNIFF_SUBR    0x02
  247. #define LMP_PAUSE_ENC    0x04
  248. #define LMP_AFH_CAP_MST    0x08
  249. #define LMP_AFH_CLS_MST    0x10
  250. #define LMP_EDR_ESCO_2M    0x20
  251. #define LMP_EDR_ESCO_3M    0x40
  252. #define LMP_EDR_3S_ESCO    0x80
  253.  
  254. #define LMP_EXT_INQ    0x01
  255. #define LMP_SIMPLE_PAIR    0x08
  256. #define LMP_ENCAPS_PDU    0x10
  257. #define LMP_ERR_DAT_REP    0x20
  258. #define LMP_NFLUSH_PKTS    0x40
  259.  
  260. #define LMP_LSTO    0x01
  261. #define LMP_INQ_TX_PWR    0x02
  262. #define LMP_EXT_FEAT    0x80
  263.  
  264. /* Link policies */
  265. #define HCI_LP_RSWITCH    0x0001
  266. #define HCI_LP_HOLD    0x0002
  267. #define HCI_LP_SNIFF    0x0004
  268. #define HCI_LP_PARK    0x0008
  269.  
  270. /* Link mode */
  271. #define HCI_LM_ACCEPT    0x8000
  272. #define HCI_LM_MASTER    0x0001
  273. #define HCI_LM_AUTH    0x0002
  274. #define HCI_LM_ENCRYPT    0x0004
  275. #define HCI_LM_TRUSTED    0x0008
  276. #define HCI_LM_RELIABLE    0x0010
  277. #define HCI_LM_SECURE    0x0020
  278.  
  279. /* -----  HCI Commands ----- */
  280.  
  281. /* Link Control */
  282. #define OGF_LINK_CTL        0x01
  283.  
  284. #define OCF_INQUIRY            0x0001
  285. typedef struct {
  286.     uint8_t        lap[3];
  287.     uint8_t        length;        /* 1.28s units */
  288.     uint8_t        num_rsp;
  289. } __attribute__ ((packed)) inquiry_cp;
  290. #define INQUIRY_CP_SIZE 5
  291.  
  292. typedef struct {
  293.     uint8_t        status;
  294.     bdaddr_t    bdaddr;
  295. } __attribute__ ((packed)) status_bdaddr_rp;
  296. #define STATUS_BDADDR_RP_SIZE 7
  297.  
  298. #define OCF_INQUIRY_CANCEL        0x0002
  299.  
  300. #define OCF_PERIODIC_INQUIRY        0x0003
  301. typedef struct {
  302.     uint16_t    max_period;    /* 1.28s units */
  303.     uint16_t    min_period;    /* 1.28s units */
  304.     uint8_t        lap[3];
  305.     uint8_t        length;        /* 1.28s units */
  306.     uint8_t        num_rsp;
  307. } __attribute__ ((packed)) periodic_inquiry_cp;
  308. #define PERIODIC_INQUIRY_CP_SIZE 9
  309.  
  310. #define OCF_EXIT_PERIODIC_INQUIRY    0x0004
  311.  
  312. #define OCF_CREATE_CONN            0x0005
  313. typedef struct {
  314.     bdaddr_t    bdaddr;
  315.     uint16_t    pkt_type;
  316.     uint8_t        pscan_rep_mode;
  317.     uint8_t        pscan_mode;
  318.     uint16_t    clock_offset;
  319.     uint8_t        role_switch;
  320. } __attribute__ ((packed)) create_conn_cp;
  321. #define CREATE_CONN_CP_SIZE 13
  322.  
  323. #define OCF_DISCONNECT            0x0006
  324. typedef struct {
  325.     uint16_t    handle;
  326.     uint8_t        reason;
  327. } __attribute__ ((packed)) disconnect_cp;
  328. #define DISCONNECT_CP_SIZE 3
  329.  
  330. #define OCF_ADD_SCO            0x0007
  331. typedef struct {
  332.     uint16_t    handle;
  333.     uint16_t    pkt_type;
  334. } __attribute__ ((packed)) add_sco_cp;
  335. #define ADD_SCO_CP_SIZE 4
  336.  
  337. #define OCF_CREATE_CONN_CANCEL        0x0008
  338. typedef struct {
  339.     bdaddr_t    bdaddr;
  340. } __attribute__ ((packed)) create_conn_cancel_cp;
  341. #define CREATE_CONN_CANCEL_CP_SIZE 6
  342.  
  343. #define OCF_ACCEPT_CONN_REQ        0x0009
  344. typedef struct {
  345.     bdaddr_t    bdaddr;
  346.     uint8_t        role;
  347. } __attribute__ ((packed)) accept_conn_req_cp;
  348. #define ACCEPT_CONN_REQ_CP_SIZE    7
  349.  
  350. #define OCF_REJECT_CONN_REQ        0x000A
  351. typedef struct {
  352.     bdaddr_t    bdaddr;
  353.     uint8_t        reason;
  354. } __attribute__ ((packed)) reject_conn_req_cp;
  355. #define REJECT_CONN_REQ_CP_SIZE    7
  356.  
  357. #define OCF_LINK_KEY_REPLY        0x000B
  358. typedef struct {
  359.     bdaddr_t    bdaddr;
  360.     uint8_t        link_key[16];
  361. } __attribute__ ((packed)) link_key_reply_cp;
  362. #define LINK_KEY_REPLY_CP_SIZE 22
  363.  
  364. #define OCF_LINK_KEY_NEG_REPLY        0x000C
  365.  
  366. #define OCF_PIN_CODE_REPLY        0x000D
  367. typedef struct {
  368.     bdaddr_t    bdaddr;
  369.     uint8_t        pin_len;
  370.     uint8_t        pin_code[16];
  371. } __attribute__ ((packed)) pin_code_reply_cp;
  372. #define PIN_CODE_REPLY_CP_SIZE 23
  373.  
  374. #define OCF_PIN_CODE_NEG_REPLY        0x000E
  375.  
  376. #define OCF_SET_CONN_PTYPE        0x000F
  377. typedef struct {
  378.     uint16_t     handle;
  379.     uint16_t     pkt_type;
  380. } __attribute__ ((packed)) set_conn_ptype_cp;
  381. #define SET_CONN_PTYPE_CP_SIZE 4
  382.  
  383. #define OCF_AUTH_REQUESTED        0x0011
  384. typedef struct {
  385.     uint16_t     handle;
  386. } __attribute__ ((packed)) auth_requested_cp;
  387. #define AUTH_REQUESTED_CP_SIZE 2
  388.  
  389. #define OCF_SET_CONN_ENCRYPT        0x0013
  390. typedef struct {
  391.     uint16_t    handle;
  392.     uint8_t        encrypt;
  393. } __attribute__ ((packed)) set_conn_encrypt_cp;
  394. #define SET_CONN_ENCRYPT_CP_SIZE 3
  395.  
  396. #define OCF_CHANGE_CONN_LINK_KEY    0x0015
  397. typedef struct {
  398.     uint16_t    handle;
  399. } __attribute__ ((packed)) change_conn_link_key_cp;
  400. #define CHANGE_CONN_LINK_KEY_CP_SIZE 2
  401.  
  402. #define OCF_MASTER_LINK_KEY        0x0017
  403. typedef struct {
  404.     uint8_t        key_flag;
  405. } __attribute__ ((packed)) master_link_key_cp;
  406. #define MASTER_LINK_KEY_CP_SIZE 1
  407.  
  408. #define OCF_REMOTE_NAME_REQ        0x0019
  409. typedef struct {
  410.     bdaddr_t    bdaddr;
  411.     uint8_t        pscan_rep_mode;
  412.     uint8_t        pscan_mode;
  413.     uint16_t    clock_offset;
  414. } __attribute__ ((packed)) remote_name_req_cp;
  415. #define REMOTE_NAME_REQ_CP_SIZE 10
  416.  
  417. #define OCF_REMOTE_NAME_REQ_CANCEL    0x001A
  418. typedef struct {
  419.     bdaddr_t    bdaddr;
  420. } __attribute__ ((packed)) remote_name_req_cancel_cp;
  421. #define REMOTE_NAME_REQ_CANCEL_CP_SIZE 6
  422.  
  423. #define OCF_READ_REMOTE_FEATURES    0x001B
  424. typedef struct {
  425.     uint16_t    handle;
  426. } __attribute__ ((packed)) read_remote_features_cp;
  427. #define READ_REMOTE_FEATURES_CP_SIZE 2
  428.  
  429. #define OCF_READ_REMOTE_EXT_FEATURES    0x001C
  430. typedef struct {
  431.     uint16_t    handle;
  432.     uint8_t        page_num;
  433. } __attribute__ ((packed)) read_remote_ext_features_cp;
  434. #define READ_REMOTE_EXT_FEATURES_CP_SIZE 3
  435.  
  436. #define OCF_READ_REMOTE_VERSION        0x001D
  437. typedef struct {
  438.     uint16_t    handle;
  439. } __attribute__ ((packed)) read_remote_version_cp;
  440. #define READ_REMOTE_VERSION_CP_SIZE 2
  441.  
  442. #define OCF_READ_CLOCK_OFFSET        0x001F
  443. typedef struct {
  444.     uint16_t    handle;
  445. } __attribute__ ((packed)) read_clock_offset_cp;
  446. #define READ_CLOCK_OFFSET_CP_SIZE 2
  447.  
  448. #define OCF_READ_LMP_HANDLE        0x0020
  449.  
  450. #define OCF_SETUP_SYNC_CONN        0x0028
  451. typedef struct {
  452.     uint16_t    handle;
  453.     uint32_t    tx_bandwith;
  454.     uint32_t    rx_bandwith;
  455.     uint16_t    max_latency;
  456.     uint16_t    voice_setting;
  457.     uint8_t        retrans_effort;
  458.     uint16_t    pkt_type;
  459. } __attribute__ ((packed)) setup_sync_conn_cp;
  460. #define SETUP_SYNC_CONN_CP_SIZE 17
  461.  
  462. #define OCF_ACCEPT_SYNC_CONN_REQ    0x0029
  463. typedef struct {
  464.     bdaddr_t    bdaddr;
  465.     uint32_t    tx_bandwith;
  466.     uint32_t    rx_bandwith;
  467.     uint16_t    max_latency;
  468.     uint16_t    voice_setting;
  469.     uint8_t        retrans_effort;
  470.     uint16_t    pkt_type;
  471. } __attribute__ ((packed)) accept_sync_conn_req_cp;
  472. #define ACCEPT_SYNC_CONN_REQ_CP_SIZE 21
  473.  
  474. #define OCF_REJECT_SYNC_CONN_REQ    0x002A
  475. typedef struct {
  476.     bdaddr_t    bdaddr;
  477.     uint8_t        reason;
  478. } __attribute__ ((packed)) reject_sync_conn_req_cp;
  479. #define REJECT_SYNC_CONN_REQ_CP_SIZE 7
  480.  
  481. #define OCF_IO_CAPABILITY_REPLY        0x002B
  482. typedef struct {
  483.     bdaddr_t    bdaddr;
  484.     uint8_t        capability;
  485.     uint8_t        oob_data;
  486.     uint8_t        authentication;
  487. } __attribute__ ((packed)) io_capability_reply_cp;
  488. #define IO_CAPABILITY_REPLY_CP_SIZE 9
  489.  
  490. #define OCF_USER_CONFIRM_REPLY        0x002C
  491. typedef struct {
  492.     bdaddr_t    bdaddr;
  493. } __attribute__ ((packed)) user_confirm_reply_cp;
  494. #define USER_CONFIRM_REPLY_CP_SIZE 6
  495.  
  496. #define OCF_USER_CONFIRM_NEG_REPLY    0x002D
  497.  
  498. #define OCF_USER_PASSKEY_REPLY        0x002E
  499. typedef struct {
  500.     bdaddr_t    bdaddr;
  501.     uint32_t    passkey;
  502. } __attribute__ ((packed)) user_passkey_reply_cp;
  503. #define USER_PASSKEY_REPLY_CP_SIZE 10
  504.  
  505. #define OCF_USER_PASSKEY_NEG_REPLY    0x002F
  506.  
  507. #define OCF_REMOTE_OOB_DATA_REPLY    0x0030
  508. typedef struct {
  509.     bdaddr_t    bdaddr;
  510.     uint8_t        hash[16];
  511.     uint8_t        randomizer[16];
  512. } __attribute__ ((packed)) remote_oob_data_reply_cp;
  513. #define REMOTE_OOB_DATA_REPLY_CP_SIZE 38
  514.  
  515. #define OCF_REMOTE_OOB_DATA_NEG_REPLY    0x0033
  516.  
  517. #define OCF_IO_CAPABILITY_NEG_REPLY    0x0034
  518. typedef struct {
  519.     bdaddr_t    bdaddr;
  520.     uint8_t        reason;
  521. } __attribute__ ((packed)) io_capability_neg_reply_cp;
  522. #define IO_CAPABILITY_NEG_REPLY_CP_SIZE 7
  523.  
  524. /* Link Policy */
  525. #define OGF_LINK_POLICY        0x02
  526.  
  527. #define OCF_HOLD_MODE            0x0001
  528. typedef struct {
  529.     uint16_t    handle;
  530.     uint16_t    max_interval;
  531.     uint16_t    min_interval;
  532. } __attribute__ ((packed)) hold_mode_cp;
  533. #define HOLD_MODE_CP_SIZE 6
  534.  
  535. #define OCF_SNIFF_MODE            0x0003
  536. typedef struct {
  537.     uint16_t    handle;
  538.     uint16_t    max_interval;
  539.     uint16_t    min_interval;
  540.     uint16_t    attempt;
  541.     uint16_t    timeout;
  542. } __attribute__ ((packed)) sniff_mode_cp;
  543. #define SNIFF_MODE_CP_SIZE 10
  544.  
  545. #define OCF_EXIT_SNIFF_MODE        0x0004
  546. typedef struct {
  547.     uint16_t    handle;
  548. } __attribute__ ((packed)) exit_sniff_mode_cp;
  549. #define EXIT_SNIFF_MODE_CP_SIZE 2
  550.  
  551. #define OCF_PARK_MODE            0x0005
  552. typedef struct {
  553.     uint16_t    handle;
  554.     uint16_t    max_interval;
  555.     uint16_t    min_interval;
  556. } __attribute__ ((packed)) park_mode_cp;
  557. #define PARK_MODE_CP_SIZE 6
  558.  
  559. #define OCF_EXIT_PARK_MODE        0x0006
  560. typedef struct {
  561.     uint16_t    handle;
  562. } __attribute__ ((packed)) exit_park_mode_cp;
  563. #define EXIT_PARK_MODE_CP_SIZE 2
  564.  
  565. #define OCF_QOS_SETUP            0x0007
  566. typedef struct {
  567.     uint8_t        service_type;        /* 1 = best effort */
  568.     uint32_t    token_rate;        /* Byte per seconds */
  569.     uint32_t    peak_bandwidth;        /* Byte per seconds */
  570.     uint32_t    latency;        /* Microseconds */
  571.     uint32_t    delay_variation;    /* Microseconds */
  572. } __attribute__ ((packed)) hci_qos;
  573. #define HCI_QOS_CP_SIZE 17
  574. typedef struct {
  575.     uint16_t     handle;
  576.     uint8_t     flags;            /* Reserved */
  577.     hci_qos     qos;
  578. } __attribute__ ((packed)) qos_setup_cp;
  579. #define QOS_SETUP_CP_SIZE (3 + HCI_QOS_CP_SIZE)
  580.  
  581. #define OCF_ROLE_DISCOVERY        0x0009
  582. typedef struct {
  583.     uint16_t    handle;
  584. } __attribute__ ((packed)) role_discovery_cp;
  585. #define ROLE_DISCOVERY_CP_SIZE 2
  586. typedef struct {
  587.     uint8_t        status;
  588.     uint16_t    handle;
  589.     uint8_t        role;
  590. } __attribute__ ((packed)) role_discovery_rp;
  591. #define ROLE_DISCOVERY_RP_SIZE 4
  592.  
  593. #define OCF_SWITCH_ROLE            0x000B
  594. typedef struct {
  595.     bdaddr_t    bdaddr;
  596.     uint8_t        role;
  597. } __attribute__ ((packed)) switch_role_cp;
  598. #define SWITCH_ROLE_CP_SIZE 7
  599.  
  600. #define OCF_READ_LINK_POLICY        0x000C
  601. typedef struct {
  602.     uint16_t    handle;
  603. } __attribute__ ((packed)) read_link_policy_cp;
  604. #define READ_LINK_POLICY_CP_SIZE 2
  605. typedef struct {
  606.     uint8_t     status;
  607.     uint16_t    handle;
  608.     uint16_t    policy;
  609. } __attribute__ ((packed)) read_link_policy_rp;
  610. #define READ_LINK_POLICY_RP_SIZE 5
  611.  
  612. #define OCF_WRITE_LINK_POLICY        0x000D
  613. typedef struct {
  614.     uint16_t    handle;
  615.     uint16_t    policy;
  616. } __attribute__ ((packed)) write_link_policy_cp;
  617. #define WRITE_LINK_POLICY_CP_SIZE 4
  618. typedef struct {
  619.     uint8_t     status;
  620.     uint16_t    handle;
  621. } __attribute__ ((packed)) write_link_policy_rp;
  622. #define WRITE_LINK_POLICY_RP_SIZE 3
  623.  
  624. #define OCF_READ_DEFAULT_LINK_POLICY    0x000E
  625.  
  626. #define OCF_WRITE_DEFAULT_LINK_POLICY    0x000F
  627.  
  628. #define OCF_FLOW_SPECIFICATION        0x0010
  629.  
  630. #define OCF_SNIFF_SUBRATING        0x0011
  631. typedef struct {
  632.     uint16_t    handle;
  633.     uint16_t    max_latency;
  634.     uint16_t    min_remote_timeout;
  635.     uint16_t    min_local_timeout;
  636. } __attribute__ ((packed)) sniff_subrating_cp;
  637. #define SNIFF_SUBRATING_CP_SIZE 8
  638.  
  639. /* Host Controller and Baseband */
  640. #define OGF_HOST_CTL        0x03
  641.  
  642. #define OCF_SET_EVENT_MASK        0x0001
  643. typedef struct {
  644.     uint8_t        mask[8];
  645. } __attribute__ ((packed)) set_event_mask_cp;
  646. #define SET_EVENT_MASK_CP_SIZE 8
  647.  
  648. #define OCF_RESET            0x0003
  649.  
  650. #define OCF_SET_EVENT_FLT        0x0005
  651. typedef struct {
  652.     uint8_t        flt_type;
  653.     uint8_t        cond_type;
  654.     uint8_t        condition[0];
  655. } __attribute__ ((packed)) set_event_flt_cp;
  656. #define SET_EVENT_FLT_CP_SIZE 2
  657.  
  658. /* Filter types */
  659. #define FLT_CLEAR_ALL            0x00
  660. #define FLT_INQ_RESULT            0x01
  661. #define FLT_CONN_SETUP            0x02
  662. /* INQ_RESULT Condition types */
  663. #define INQ_RESULT_RETURN_ALL        0x00
  664. #define INQ_RESULT_RETURN_CLASS        0x01
  665. #define INQ_RESULT_RETURN_BDADDR    0x02
  666. /* CONN_SETUP Condition types */
  667. #define CONN_SETUP_ALLOW_ALL        0x00
  668. #define CONN_SETUP_ALLOW_CLASS        0x01
  669. #define CONN_SETUP_ALLOW_BDADDR        0x02
  670. /* CONN_SETUP Conditions */
  671. #define CONN_SETUP_AUTO_OFF        0x01
  672. #define CONN_SETUP_AUTO_ON        0x02
  673.  
  674. #define OCF_FLUSH            0x0008
  675.  
  676. #define OCF_READ_PIN_TYPE        0x0009
  677. typedef struct {
  678.     uint8_t        status;
  679.     uint8_t        pin_type;
  680. } __attribute__ ((packed)) read_pin_type_rp;
  681. #define READ_PIN_TYPE_RP_SIZE 2
  682.  
  683. #define OCF_WRITE_PIN_TYPE        0x000A
  684. typedef struct {
  685.     uint8_t        pin_type;
  686. } __attribute__ ((packed)) write_pin_type_cp;
  687. #define WRITE_PIN_TYPE_CP_SIZE 1
  688.  
  689. #define OCF_CREATE_NEW_UNIT_KEY        0x000B
  690.  
  691. #define OCF_READ_STORED_LINK_KEY    0x000D
  692. typedef struct {
  693.     bdaddr_t    bdaddr;
  694.     uint8_t        read_all;
  695. } __attribute__ ((packed)) read_stored_link_key_cp;
  696. #define READ_STORED_LINK_KEY_CP_SIZE 7
  697. typedef struct {
  698.     uint8_t        status;
  699.     uint16_t    max_keys;
  700.     uint16_t    num_keys;
  701. } __attribute__ ((packed)) read_stored_link_key_rp;
  702. #define READ_STORED_LINK_KEY_RP_SIZE 5
  703.  
  704. #define OCF_WRITE_STORED_LINK_KEY    0x0011
  705. typedef struct {
  706.     uint8_t        num_keys;
  707.     /* variable length part */
  708. } __attribute__ ((packed)) write_stored_link_key_cp;
  709. #define WRITE_STORED_LINK_KEY_CP_SIZE 1
  710. typedef struct {
  711.     uint8_t        status;
  712.     uint8_t        num_keys;
  713. } __attribute__ ((packed)) write_stored_link_key_rp;
  714. #define READ_WRITE_LINK_KEY_RP_SIZE 2
  715.  
  716. #define OCF_DELETE_STORED_LINK_KEY    0x0012
  717. typedef struct {
  718.     bdaddr_t    bdaddr;
  719.     uint8_t        delete_all;
  720. } __attribute__ ((packed)) delete_stored_link_key_cp;
  721. #define DELETE_STORED_LINK_KEY_CP_SIZE 7
  722. typedef struct {
  723.     uint8_t        status;
  724.     uint16_t    num_keys;
  725. } __attribute__ ((packed)) delete_stored_link_key_rp;
  726. #define DELETE_STORED_LINK_KEY_RP_SIZE 3
  727.  
  728. #define OCF_CHANGE_LOCAL_NAME        0x0013
  729. typedef struct {
  730.     uint8_t        name[248];
  731. } __attribute__ ((packed)) change_local_name_cp;
  732. #define CHANGE_LOCAL_NAME_CP_SIZE 248 
  733.  
  734. #define OCF_READ_LOCAL_NAME        0x0014
  735. typedef struct {
  736.     uint8_t        status;
  737.     uint8_t        name[248];
  738. } __attribute__ ((packed)) read_local_name_rp;
  739. #define READ_LOCAL_NAME_RP_SIZE 249 
  740.  
  741. #define OCF_READ_CONN_ACCEPT_TIMEOUT    0x0015
  742. typedef struct {
  743.     uint8_t        status;
  744.     uint16_t    timeout;
  745. } __attribute__ ((packed)) read_conn_accept_timeout_rp;
  746. #define READ_CONN_ACCEPT_TIMEOUT_RP_SIZE 3
  747.  
  748. #define OCF_WRITE_CONN_ACCEPT_TIMEOUT    0x0016
  749. typedef struct {
  750.     uint16_t    timeout;
  751. } __attribute__ ((packed)) write_conn_accept_timeout_cp;
  752. #define WRITE_CONN_ACCEPT_TIMEOUT_CP_SIZE 2
  753.  
  754. #define OCF_READ_PAGE_TIMEOUT        0x0017
  755. typedef struct {
  756.     uint8_t        status;
  757.     uint16_t    timeout;
  758. } __attribute__ ((packed)) read_page_timeout_rp;
  759. #define READ_PAGE_TIMEOUT_RP_SIZE 3
  760.  
  761. #define OCF_WRITE_PAGE_TIMEOUT        0x0018
  762. typedef struct {
  763.     uint16_t    timeout;
  764. } __attribute__ ((packed)) write_page_timeout_cp;
  765. #define WRITE_PAGE_TIMEOUT_CP_SIZE 2
  766.  
  767. #define OCF_READ_SCAN_ENABLE        0x0019
  768. typedef struct {
  769.     uint8_t        status;
  770.     uint8_t        enable;
  771. } __attribute__ ((packed)) read_scan_enable_rp;
  772. #define READ_SCAN_ENABLE_RP_SIZE 2
  773.  
  774. #define OCF_WRITE_SCAN_ENABLE        0x001A
  775.     #define SCAN_DISABLED        0x00
  776.     #define SCAN_INQUIRY        0x01
  777.     #define SCAN_PAGE        0x02
  778.  
  779. #define OCF_READ_PAGE_ACTIVITY        0x001B
  780. typedef struct {
  781.     uint8_t        status;
  782.     uint16_t    interval;
  783.     uint16_t    window;
  784. } __attribute__ ((packed)) read_page_activity_rp;
  785. #define READ_PAGE_ACTIVITY_RP_SIZE 5
  786.  
  787. #define OCF_WRITE_PAGE_ACTIVITY        0x001C
  788. typedef struct {
  789.     uint16_t    interval;
  790.     uint16_t    window;
  791. } __attribute__ ((packed)) write_page_activity_cp;
  792. #define WRITE_PAGE_ACTIVITY_CP_SIZE 4
  793.  
  794. #define OCF_READ_INQ_ACTIVITY        0x001D
  795. typedef struct {
  796.     uint8_t        status;
  797.     uint16_t    interval;
  798.     uint16_t    window;
  799. } __attribute__ ((packed)) read_inq_activity_rp;
  800. #define READ_INQ_ACTIVITY_RP_SIZE 5
  801.  
  802. #define OCF_WRITE_INQ_ACTIVITY        0x001E
  803. typedef struct {
  804.     uint16_t    interval;
  805.     uint16_t    window;
  806. } __attribute__ ((packed)) write_inq_activity_cp;
  807. #define WRITE_INQ_ACTIVITY_CP_SIZE 4
  808.  
  809. #define OCF_READ_AUTH_ENABLE        0x001F
  810.  
  811. #define OCF_WRITE_AUTH_ENABLE        0x0020
  812.     #define AUTH_DISABLED        0x00
  813.     #define AUTH_ENABLED        0x01
  814.  
  815. #define OCF_READ_ENCRYPT_MODE        0x0021
  816.  
  817. #define OCF_WRITE_ENCRYPT_MODE        0x0022
  818.     #define ENCRYPT_DISABLED    0x00
  819.     #define ENCRYPT_P2P        0x01
  820.     #define ENCRYPT_BOTH        0x02
  821.  
  822. #define OCF_READ_CLASS_OF_DEV        0x0023
  823. typedef struct {
  824.     uint8_t        status;
  825.     uint8_t        dev_class[3];
  826. } __attribute__ ((packed)) read_class_of_dev_rp;
  827. #define READ_CLASS_OF_DEV_RP_SIZE 4 
  828.  
  829. #define OCF_WRITE_CLASS_OF_DEV        0x0024
  830. typedef struct {
  831.     uint8_t        dev_class[3];
  832. } __attribute__ ((packed)) write_class_of_dev_cp;
  833. #define WRITE_CLASS_OF_DEV_CP_SIZE 3
  834.  
  835. #define OCF_READ_VOICE_SETTING        0x0025
  836. typedef struct {
  837.     uint8_t        status;
  838.     uint16_t    voice_setting;
  839. } __attribute__ ((packed)) read_voice_setting_rp;
  840. #define READ_VOICE_SETTING_RP_SIZE 3
  841.  
  842. #define OCF_WRITE_VOICE_SETTING        0x0026
  843. typedef struct {
  844.     uint16_t    voice_setting;
  845. } __attribute__ ((packed)) write_voice_setting_cp;
  846. #define WRITE_VOICE_SETTING_CP_SIZE 2
  847.  
  848. #define OCF_READ_AUTOMATIC_FLUSH_TIMEOUT    0x0027
  849.  
  850. #define OCF_WRITE_AUTOMATIC_FLUSH_TIMEOUT    0x0028
  851.  
  852. #define OCF_READ_NUM_BROADCAST_RETRANS    0x0029
  853.  
  854. #define OCF_WRITE_NUM_BROADCAST_RETRANS    0x002A
  855.  
  856. #define OCF_READ_HOLD_MODE_ACTIVITY    0x002B
  857.  
  858. #define OCF_WRITE_HOLD_MODE_ACTIVITY    0x002C
  859.  
  860. #define OCF_READ_TRANSMIT_POWER_LEVEL    0x002D
  861. typedef struct {
  862.     uint16_t    handle;
  863.     uint8_t        type;
  864. } __attribute__ ((packed)) read_transmit_power_level_cp;
  865. #define READ_TRANSMIT_POWER_LEVEL_CP_SIZE 3
  866. typedef struct {
  867.     uint8_t        status;
  868.     uint16_t    handle;
  869.     int8_t        level;
  870. } __attribute__ ((packed)) read_transmit_power_level_rp;
  871. #define READ_TRANSMIT_POWER_LEVEL_RP_SIZE 4
  872.  
  873. #define OCF_READ_SYNC_FLOW_ENABLE    0x002E
  874.  
  875. #define OCF_WRITE_SYNC_FLOW_ENABLE    0x002F
  876.  
  877. #define OCF_SET_CONTROLLER_TO_HOST_FC    0x0031
  878.  
  879. #define OCF_HOST_BUFFER_SIZE        0x0033
  880. typedef struct {
  881.     uint16_t    acl_mtu;
  882.     uint8_t        sco_mtu;
  883.     uint16_t    acl_max_pkt;
  884.     uint16_t    sco_max_pkt;
  885. } __attribute__ ((packed)) host_buffer_size_cp;
  886. #define HOST_BUFFER_SIZE_CP_SIZE 7
  887.  
  888. #define OCF_HOST_NUM_COMP_PKTS        0x0035
  889. typedef struct {
  890.     uint8_t        num_hndl;
  891.     /* variable length part */
  892. } __attribute__ ((packed)) host_num_comp_pkts_cp;
  893. #define HOST_NUM_COMP_PKTS_CP_SIZE 1
  894.  
  895. #define OCF_READ_LINK_SUPERVISION_TIMEOUT    0x0036
  896. typedef struct {
  897.     uint8_t        status;
  898.     uint16_t    handle;
  899.     uint16_t    timeout;
  900. } __attribute__ ((packed)) read_link_supervision_timeout_rp;
  901. #define READ_LINK_SUPERVISION_TIMEOUT_RP_SIZE 5
  902.  
  903. #define OCF_WRITE_LINK_SUPERVISION_TIMEOUT    0x0037
  904. typedef struct {
  905.     uint16_t    handle;
  906.     uint16_t    timeout;
  907. } __attribute__ ((packed)) write_link_supervision_timeout_cp;
  908. #define WRITE_LINK_SUPERVISION_TIMEOUT_CP_SIZE 4
  909. typedef struct {
  910.     uint8_t        status;
  911.     uint16_t    handle;
  912. } __attribute__ ((packed)) write_link_supervision_timeout_rp;
  913. #define WRITE_LINK_SUPERVISION_TIMEOUT_RP_SIZE 3
  914.  
  915. #define OCF_READ_NUM_SUPPORTED_IAC    0x0038
  916.  
  917. #define MAX_IAC_LAP 0x40
  918. #define OCF_READ_CURRENT_IAC_LAP    0x0039
  919. typedef struct {
  920.     uint8_t        status;
  921.     uint8_t        num_current_iac;
  922.     uint8_t        lap[MAX_IAC_LAP][3];
  923. } __attribute__ ((packed)) read_current_iac_lap_rp;
  924. #define READ_CURRENT_IAC_LAP_RP_SIZE 2+3*MAX_IAC_LAP
  925.  
  926. #define OCF_WRITE_CURRENT_IAC_LAP    0x003A
  927. typedef struct {
  928.     uint8_t        num_current_iac;
  929.     uint8_t        lap[MAX_IAC_LAP][3];
  930. } __attribute__ ((packed)) write_current_iac_lap_cp;
  931. #define WRITE_CURRENT_IAC_LAP_CP_SIZE 1+3*MAX_IAC_LAP
  932.  
  933. #define OCF_READ_PAGE_SCAN_PERIOD_MODE    0x003B
  934.  
  935. #define OCF_WRITE_PAGE_SCAN_PERIOD_MODE    0x003C
  936.  
  937. #define OCF_READ_PAGE_SCAN_MODE        0x003D
  938.  
  939. #define OCF_WRITE_PAGE_SCAN_MODE    0x003E
  940.  
  941. #define OCF_SET_AFH_CLASSIFICATION    0x003F
  942. typedef struct {
  943.     uint8_t        map[10];
  944. } __attribute__ ((packed)) set_afh_classification_cp;
  945. #define SET_AFH_CLASSIFICATION_CP_SIZE 10
  946. typedef struct {
  947.     uint8_t        status;
  948. } __attribute__ ((packed)) set_afh_classification_rp;
  949. #define SET_AFH_CLASSIFICATION_RP_SIZE 1
  950.  
  951. #define OCF_READ_INQUIRY_SCAN_TYPE    0x0042
  952. typedef struct {
  953.     uint8_t        status;
  954.     uint8_t        type;
  955. } __attribute__ ((packed)) read_inquiry_scan_type_rp;
  956. #define READ_INQUIRY_SCAN_TYPE_RP_SIZE 2
  957.  
  958. #define OCF_WRITE_INQUIRY_SCAN_TYPE    0x0043
  959. typedef struct {
  960.     uint8_t        type;
  961. } __attribute__ ((packed)) write_inquiry_scan_type_cp;
  962. #define WRITE_INQUIRY_SCAN_TYPE_CP_SIZE 1
  963. typedef struct {
  964.     uint8_t        status;
  965. } __attribute__ ((packed)) write_inquiry_scan_type_rp;
  966. #define WRITE_INQUIRY_SCAN_TYPE_RP_SIZE 1
  967.  
  968. #define OCF_READ_INQUIRY_MODE        0x0044
  969. typedef struct {
  970.     uint8_t        status;
  971.     uint8_t        mode;
  972. } __attribute__ ((packed)) read_inquiry_mode_rp;
  973. #define READ_INQUIRY_MODE_RP_SIZE 2
  974.  
  975. #define OCF_WRITE_INQUIRY_MODE        0x0045
  976. typedef struct {
  977.     uint8_t        mode;
  978. } __attribute__ ((packed)) write_inquiry_mode_cp;
  979. #define WRITE_INQUIRY_MODE_CP_SIZE 1
  980. typedef struct {
  981.     uint8_t        status;
  982. } __attribute__ ((packed)) write_inquiry_mode_rp;
  983. #define WRITE_INQUIRY_MODE_RP_SIZE 1
  984.  
  985. #define OCF_READ_PAGE_SCAN_TYPE        0x0046
  986.  
  987. #define OCF_WRITE_PAGE_SCAN_TYPE    0x0047
  988.  
  989. #define OCF_READ_AFH_MODE        0x0048
  990. typedef struct {
  991.     uint8_t        status;
  992.     uint8_t        mode;
  993. } __attribute__ ((packed)) read_afh_mode_rp;
  994. #define READ_AFH_MODE_RP_SIZE 2
  995.  
  996. #define OCF_WRITE_AFH_MODE        0x0049
  997. typedef struct {
  998.     uint8_t        mode;
  999. } __attribute__ ((packed)) write_afh_mode_cp;
  1000. #define WRITE_AFH_MODE_CP_SIZE 1
  1001. typedef struct {
  1002.     uint8_t        status;
  1003. } __attribute__ ((packed)) write_afh_mode_rp;
  1004. #define WRITE_AFH_MODE_RP_SIZE 1
  1005.  
  1006. #define OCF_READ_EXT_INQUIRY_RESPONSE    0x0051
  1007. typedef struct {
  1008.     uint8_t        status;
  1009.     uint8_t        fec;
  1010.     uint8_t        data[240];
  1011. } __attribute__ ((packed)) read_ext_inquiry_response_rp;
  1012. #define READ_EXT_INQUIRY_RESPONSE_RP_SIZE 242
  1013.  
  1014. #define OCF_WRITE_EXT_INQUIRY_RESPONSE    0x0052
  1015. typedef struct {
  1016.     uint8_t        fec;
  1017.     uint8_t        data[240];
  1018. } __attribute__ ((packed)) write_ext_inquiry_response_cp;
  1019. #define WRITE_EXT_INQUIRY_RESPONSE_CP_SIZE 241
  1020. typedef struct {
  1021.     uint8_t        status;
  1022. } __attribute__ ((packed)) write_ext_inquiry_response_rp;
  1023. #define WRITE_EXT_INQUIRY_RESPONSE_RP_SIZE 1
  1024.  
  1025. #define OCF_REFRESH_ENCRYPTION_KEY    0x0053
  1026. typedef struct {
  1027.     uint16_t    handle;
  1028. } __attribute__ ((packed)) refresh_encryption_key_cp;
  1029. #define REFRESH_ENCRYPTION_KEY_CP_SIZE 2
  1030. typedef struct {
  1031.     uint8_t        status;
  1032. } __attribute__ ((packed)) refresh_encryption_key_rp;
  1033. #define REFRESH_ENCRYPTION_KEY_RP_SIZE 1
  1034.  
  1035. #define OCF_READ_SIMPLE_PAIRING_MODE    0x0055
  1036. typedef struct {
  1037.     uint8_t        status;
  1038.     uint8_t        mode;
  1039. } __attribute__ ((packed)) read_simple_pairing_mode_rp;
  1040. #define READ_SIMPLE_PAIRING_MODE_RP_SIZE 2
  1041.  
  1042. #define OCF_WRITE_SIMPLE_PAIRING_MODE    0x0056
  1043. typedef struct {
  1044.     uint8_t        mode;
  1045. } __attribute__ ((packed)) write_simple_pairing_mode_cp;
  1046. #define WRITE_SIMPLE_PAIRING_MODE_CP_SIZE 1
  1047. typedef struct {
  1048.     uint8_t        status;
  1049. } __attribute__ ((packed)) write_simple_pairing_mode_rp;
  1050. #define WRITE_SIMPLE_PAIRING_MODE_RP_SIZE 1
  1051.  
  1052. #define OCF_READ_LOCAL_OOB_DATA        0x0057
  1053. typedef struct {
  1054.     uint8_t        status;
  1055.     uint8_t        hash[16];
  1056.     uint8_t        randomizer[16];
  1057. } __attribute__ ((packed)) read_local_oob_data_rp;
  1058. #define READ_LOCAL_OOB_DATA_RP_SIZE 33
  1059.  
  1060. #define OCF_READ_INQUIRY_TRANSMIT_POWER_LEVEL    0x0058
  1061. typedef struct {
  1062.     uint8_t        status;
  1063.     int8_t        level;
  1064. } __attribute__ ((packed)) read_inquiry_transmit_power_level_rp;
  1065. #define READ_INQUIRY_TRANSMIT_POWER_LEVEL_RP_SIZE 2
  1066.  
  1067. #define OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL    0x0059
  1068. typedef struct {
  1069.     int8_t        level;
  1070. } __attribute__ ((packed)) write_inquiry_transmit_power_level_cp;
  1071. #define WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_CP_SIZE 1
  1072. typedef struct {
  1073.     uint8_t        status;
  1074. } __attribute__ ((packed)) write_inquiry_transmit_power_level_rp;
  1075. #define WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_RP_SIZE 1
  1076.  
  1077. #define OCF_READ_DEFAULT_ERROR_DATA_REPORTING    0x005A
  1078. typedef struct {
  1079.     uint8_t        status;
  1080.     uint8_t        reporting;
  1081. } __attribute__ ((packed)) read_default_error_data_reporting_rp;
  1082. #define READ_DEFAULT_ERROR_DATA_REPORTING_RP_SIZE 2
  1083.  
  1084. #define OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING    0x005B
  1085. typedef struct {
  1086.     uint8_t        reporting;
  1087. } __attribute__ ((packed)) write_default_error_data_reporting_cp;
  1088. #define WRITE_DEFAULT_ERROR_DATA_REPORTING_CP_SIZE 1
  1089. typedef struct {
  1090.     uint8_t        status;
  1091. } __attribute__ ((packed)) write_default_error_data_reporting_rp;
  1092. #define WRITE_DEFAULT_ERROR_DATA_REPORTING_RP_SIZE 1
  1093.  
  1094. #define OCF_ENHANCED_FLUSH        0x005F
  1095. typedef struct {
  1096.     uint16_t    handle;
  1097.     uint8_t        type;
  1098. } __attribute__ ((packed)) enhanced_flush_cp;
  1099. #define ENHANCED_FLUSH_CP_SIZE 3
  1100.  
  1101. #define OCF_SEND_KEYPRESS_NOTIFY    0x0060
  1102. typedef struct {
  1103.     bdaddr_t    bdaddr;
  1104.     uint8_t        type;
  1105. } __attribute__ ((packed)) send_keypress_notify_cp;
  1106. #define SEND_KEYPRESS_NOTIFY_CP_SIZE 7
  1107. typedef struct {
  1108.     uint8_t        status;
  1109. } __attribute__ ((packed)) send_keypress_notify_rp;
  1110. #define SEND_KEYPRESS_NOTIFY_RP_SIZE 1
  1111.  
  1112. /* Informational Parameters */
  1113. #define OGF_INFO_PARAM        0x04
  1114.  
  1115. #define OCF_READ_LOCAL_VERSION        0x0001
  1116. typedef struct {
  1117.     uint8_t        status;
  1118.     uint8_t        hci_ver;
  1119.     uint16_t    hci_rev;
  1120.     uint8_t        lmp_ver;
  1121.     uint16_t    manufacturer;
  1122.     uint16_t    lmp_subver;
  1123. } __attribute__ ((packed)) read_local_version_rp;
  1124. #define READ_LOCAL_VERSION_RP_SIZE 9
  1125.  
  1126. #define OCF_READ_LOCAL_COMMANDS        0x0002
  1127. typedef struct {
  1128.     uint8_t        status;
  1129.     uint8_t        commands[64];
  1130. } __attribute__ ((packed)) read_local_commands_rp;
  1131. #define READ_LOCAL_COMMANDS_RP_SIZE 65
  1132.  
  1133. #define OCF_READ_LOCAL_FEATURES        0x0003
  1134. typedef struct {
  1135.     uint8_t        status;
  1136.     uint8_t        features[8];
  1137. } __attribute__ ((packed)) read_local_features_rp;
  1138. #define READ_LOCAL_FEATURES_RP_SIZE 9
  1139.  
  1140. #define OCF_READ_LOCAL_EXT_FEATURES    0x0004
  1141. typedef struct {
  1142.     uint8_t        page_num;
  1143. } __attribute__ ((packed)) read_local_ext_features_cp;
  1144. #define READ_LOCAL_EXT_FEATURES_CP_SIZE 1
  1145. typedef struct {
  1146.     uint8_t        status;
  1147.     uint8_t        page_num;
  1148.     uint8_t        max_page_num;
  1149.     uint8_t        features[8];
  1150. } __attribute__ ((packed)) read_local_ext_features_rp;
  1151. #define READ_LOCAL_EXT_FEATURES_RP_SIZE 11
  1152.  
  1153. #define OCF_READ_BUFFER_SIZE        0x0005
  1154. typedef struct {
  1155.     uint8_t        status;
  1156.     uint16_t    acl_mtu;
  1157.     uint8_t        sco_mtu;
  1158.     uint16_t    acl_max_pkt;
  1159.     uint16_t    sco_max_pkt;
  1160. } __attribute__ ((packed)) read_buffer_size_rp;
  1161. #define READ_BUFFER_SIZE_RP_SIZE 8
  1162.  
  1163. #define OCF_READ_COUNTRY_CODE        0x0007
  1164.  
  1165. #define OCF_READ_BD_ADDR        0x0009
  1166. typedef struct {
  1167.     uint8_t        status;
  1168.     bdaddr_t    bdaddr;
  1169. } __attribute__ ((packed)) read_bd_addr_rp;
  1170. #define READ_BD_ADDR_RP_SIZE 7
  1171.  
  1172. /* Status params */
  1173. #define OGF_STATUS_PARAM    0x05
  1174.  
  1175. #define OCF_READ_FAILED_CONTACT_COUNTER        0x0001
  1176. typedef struct {
  1177.     uint8_t        status;
  1178.     uint16_t    handle;
  1179.     uint8_t        counter;
  1180. } __attribute__ ((packed)) read_failed_contact_counter_rp;
  1181. #define READ_FAILED_CONTACT_COUNTER_RP_SIZE 4
  1182.  
  1183. #define OCF_RESET_FAILED_CONTACT_COUNTER    0x0002
  1184. typedef struct {
  1185.     uint8_t        status;
  1186.     uint16_t    handle;
  1187. } __attribute__ ((packed)) reset_failed_contact_counter_rp;
  1188. #define RESET_FAILED_CONTACT_COUNTER_RP_SIZE 4
  1189.  
  1190. #define OCF_READ_LINK_QUALITY        0x0003
  1191. typedef struct {
  1192.     uint8_t        status;
  1193.     uint16_t    handle;
  1194.     uint8_t        link_quality;
  1195. } __attribute__ ((packed)) read_link_quality_rp;
  1196. #define READ_LINK_QUALITY_RP_SIZE 4
  1197.  
  1198. #define OCF_READ_RSSI            0x0005
  1199. typedef struct {
  1200.     uint8_t        status;
  1201.     uint16_t    handle;
  1202.     int8_t        rssi;
  1203. } __attribute__ ((packed)) read_rssi_rp;
  1204. #define READ_RSSI_RP_SIZE 4
  1205.  
  1206. #define OCF_READ_AFH_MAP        0x0006
  1207. typedef struct {
  1208.     uint8_t        status;
  1209.     uint16_t    handle;
  1210.     uint8_t        mode;
  1211.     uint8_t        map[10];
  1212. } __attribute__ ((packed)) read_afh_map_rp;
  1213. #define READ_AFH_MAP_RP_SIZE 14
  1214.  
  1215. #define OCF_READ_CLOCK            0x0007
  1216. typedef struct {
  1217.     uint16_t    handle;
  1218.     uint8_t        which_clock;
  1219. } __attribute__ ((packed)) read_clock_cp;
  1220. #define READ_CLOCK_CP_SIZE 3
  1221. typedef struct {
  1222.     uint8_t        status;
  1223.     uint16_t    handle;
  1224.     uint32_t    clock;
  1225.     uint16_t    accuracy;
  1226. } __attribute__ ((packed)) read_clock_rp;
  1227. #define READ_CLOCK_RP_SIZE 9
  1228.  
  1229. /* Testing commands */
  1230. #define OGF_TESTING_CMD        0x3e
  1231.  
  1232. #define OCF_READ_LOOPBACK_MODE            0x0001
  1233.  
  1234. #define OCF_WRITE_LOOPBACK_MODE            0x0002
  1235.  
  1236. #define OCF_ENABLE_DEVICE_UNDER_TEST_MODE    0x0003
  1237.  
  1238. #define OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE    0x0004
  1239. typedef struct {
  1240.     uint8_t        mode;
  1241. } __attribute__ ((packed)) write_simple_pairing_debug_mode_cp;
  1242. #define WRITE_SIMPLE_PAIRING_DEBUG_MODE_CP_SIZE 1
  1243. typedef struct {
  1244.     uint8_t        status;
  1245. } __attribute__ ((packed)) write_simple_pairing_debug_mode_rp;
  1246. #define WRITE_SIMPLE_PAIRING_DEBUG_MODE_RP_SIZE 1
  1247.  
  1248. /* Vendor specific commands */
  1249. #define OGF_VENDOR_CMD        0x3f
  1250.  
  1251. /* ---- HCI Events ---- */
  1252.  
  1253. #define EVT_INQUIRY_COMPLETE        0x01
  1254.  
  1255. #define EVT_INQUIRY_RESULT        0x02
  1256. typedef struct {
  1257.     bdaddr_t    bdaddr;
  1258.     uint8_t        pscan_rep_mode;
  1259.     uint8_t        pscan_period_mode;
  1260.     uint8_t        pscan_mode;
  1261.     uint8_t        dev_class[3];
  1262.     uint16_t    clock_offset;
  1263. } __attribute__ ((packed)) inquiry_info;
  1264. #define INQUIRY_INFO_SIZE 14
  1265.  
  1266. #define EVT_CONN_COMPLETE        0x03
  1267. typedef struct {
  1268.     uint8_t        status;
  1269.     uint16_t    handle;
  1270.     bdaddr_t    bdaddr;
  1271.     uint8_t        link_type;
  1272.     uint8_t        encr_mode;
  1273. } __attribute__ ((packed)) evt_conn_complete;
  1274. #define EVT_CONN_COMPLETE_SIZE 13
  1275.  
  1276. #define EVT_CONN_REQUEST        0x04
  1277. typedef struct {
  1278.     bdaddr_t    bdaddr;
  1279.     uint8_t        dev_class[3];
  1280.     uint8_t        link_type;
  1281. } __attribute__ ((packed)) evt_conn_request;
  1282. #define EVT_CONN_REQUEST_SIZE 10
  1283.  
  1284. #define EVT_DISCONN_COMPLETE        0x05
  1285. typedef struct {
  1286.     uint8_t        status;
  1287.     uint16_t    handle;
  1288.     uint8_t        reason;
  1289. } __attribute__ ((packed)) evt_disconn_complete;
  1290. #define EVT_DISCONN_COMPLETE_SIZE 4
  1291.  
  1292. #define EVT_AUTH_COMPLETE        0x06
  1293. typedef struct {
  1294.     uint8_t        status;
  1295.     uint16_t    handle;
  1296. } __attribute__ ((packed)) evt_auth_complete;
  1297. #define EVT_AUTH_COMPLETE_SIZE 3
  1298.  
  1299. #define EVT_REMOTE_NAME_REQ_COMPLETE    0x07
  1300. typedef struct {
  1301.     uint8_t        status;
  1302.     bdaddr_t    bdaddr;
  1303.     uint8_t        name[248];
  1304. } __attribute__ ((packed)) evt_remote_name_req_complete;
  1305. #define EVT_REMOTE_NAME_REQ_COMPLETE_SIZE 255
  1306.  
  1307. #define EVT_ENCRYPT_CHANGE        0x08
  1308. typedef struct {
  1309.     uint8_t        status;
  1310.     uint16_t    handle;
  1311.     uint8_t        encrypt;
  1312. } __attribute__ ((packed)) evt_encrypt_change;
  1313. #define EVT_ENCRYPT_CHANGE_SIZE 5
  1314.  
  1315. #define EVT_CHANGE_CONN_LINK_KEY_COMPLETE    0x09
  1316. typedef struct {
  1317.     uint8_t        status;
  1318.     uint16_t    handle;
  1319. }  __attribute__ ((packed)) evt_change_conn_link_key_complete;
  1320. #define EVT_CHANGE_CONN_LINK_KEY_COMPLETE_SIZE 3
  1321.  
  1322. #define EVT_MASTER_LINK_KEY_COMPLETE        0x0A
  1323. typedef struct {
  1324.     uint8_t        status;
  1325.     uint16_t    handle;
  1326.     uint8_t        key_flag;
  1327. } __attribute__ ((packed)) evt_master_link_key_complete;
  1328. #define EVT_MASTER_LINK_KEY_COMPLETE_SIZE 4
  1329.  
  1330. #define EVT_READ_REMOTE_FEATURES_COMPLETE    0x0B
  1331. typedef struct {
  1332.     uint8_t        status;
  1333.     uint16_t    handle;
  1334.     uint8_t        features[8];
  1335. } __attribute__ ((packed)) evt_read_remote_features_complete;
  1336. #define EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE 11
  1337.  
  1338. #define EVT_READ_REMOTE_VERSION_COMPLETE    0x0C
  1339. typedef struct {
  1340.     uint8_t        status;
  1341.     uint16_t    handle;
  1342.     uint8_t        lmp_ver;
  1343.     uint16_t    manufacturer;
  1344.     uint16_t    lmp_subver;
  1345. } __attribute__ ((packed)) evt_read_remote_version_complete;
  1346. #define EVT_READ_REMOTE_VERSION_COMPLETE_SIZE 8
  1347.  
  1348. #define EVT_QOS_SETUP_COMPLETE        0x0D
  1349. typedef struct {
  1350.     uint8_t        status;
  1351.     uint16_t    handle;
  1352.     uint8_t        flags;            /* Reserved */
  1353.     hci_qos        qos;
  1354. } __attribute__ ((packed)) evt_qos_setup_complete;
  1355. #define EVT_QOS_SETUP_COMPLETE_SIZE (4 + HCI_QOS_CP_SIZE)
  1356.  
  1357. #define EVT_CMD_COMPLETE         0x0E
  1358. typedef struct {
  1359.     uint8_t        ncmd;
  1360.     uint16_t    opcode;
  1361. } __attribute__ ((packed)) evt_cmd_complete;
  1362. #define EVT_CMD_COMPLETE_SIZE 3
  1363.  
  1364. #define EVT_CMD_STATUS             0x0F
  1365. typedef struct {
  1366.     uint8_t        status;
  1367.     uint8_t        ncmd;
  1368.     uint16_t    opcode;
  1369. } __attribute__ ((packed)) evt_cmd_status;
  1370. #define EVT_CMD_STATUS_SIZE 4
  1371.  
  1372. #define EVT_HARDWARE_ERROR        0x10
  1373. typedef struct {
  1374.     uint8_t        code;
  1375. } __attribute__ ((packed)) evt_hardware_error;
  1376. #define EVT_HARDWARE_ERROR_SIZE 1
  1377.  
  1378. #define EVT_FLUSH_OCCURRED        0x11
  1379. typedef struct {
  1380.     uint16_t    handle;
  1381. } __attribute__ ((packed)) evt_flush_occured;
  1382. #define EVT_FLUSH_OCCURRED_SIZE 2
  1383.  
  1384. #define EVT_ROLE_CHANGE            0x12
  1385. typedef struct {
  1386.     uint8_t        status;
  1387.     bdaddr_t    bdaddr;
  1388.     uint8_t        role;
  1389. } __attribute__ ((packed)) evt_role_change;
  1390. #define EVT_ROLE_CHANGE_SIZE 8
  1391.  
  1392. #define EVT_NUM_COMP_PKTS        0x13
  1393. typedef struct {
  1394.     uint8_t        num_hndl;
  1395.     /* variable length part */
  1396. } __attribute__ ((packed)) evt_num_comp_pkts;
  1397. #define EVT_NUM_COMP_PKTS_SIZE 1
  1398.  
  1399. #define EVT_MODE_CHANGE            0x14
  1400. typedef struct {
  1401.     uint8_t        status;
  1402.     uint16_t    handle;
  1403.     uint8_t        mode;
  1404.     uint16_t    interval;
  1405. } __attribute__ ((packed)) evt_mode_change;
  1406. #define EVT_MODE_CHANGE_SIZE 6
  1407.  
  1408. #define EVT_RETURN_LINK_KEYS        0x15
  1409. typedef struct {
  1410.     uint8_t        num_keys;
  1411.     /* variable length part */
  1412. } __attribute__ ((packed)) evt_return_link_keys;
  1413. #define EVT_RETURN_LINK_KEYS_SIZE 1
  1414.  
  1415. #define EVT_PIN_CODE_REQ        0x16
  1416. typedef struct {
  1417.     bdaddr_t    bdaddr;
  1418. } __attribute__ ((packed)) evt_pin_code_req;
  1419. #define EVT_PIN_CODE_REQ_SIZE 6
  1420.  
  1421. #define EVT_LINK_KEY_REQ        0x17
  1422. typedef struct {
  1423.     bdaddr_t    bdaddr;
  1424. } __attribute__ ((packed)) evt_link_key_req;
  1425. #define EVT_LINK_KEY_REQ_SIZE 6
  1426.  
  1427. #define EVT_LINK_KEY_NOTIFY        0x18
  1428. typedef struct {
  1429.     bdaddr_t    bdaddr;
  1430.     uint8_t        link_key[16];
  1431.     uint8_t        key_type;
  1432. } __attribute__ ((packed)) evt_link_key_notify;
  1433. #define EVT_LINK_KEY_NOTIFY_SIZE 23
  1434.  
  1435. #define EVT_LOOPBACK_COMMAND        0x19
  1436.  
  1437. #define EVT_DATA_BUFFER_OVERFLOW    0x1A
  1438. typedef struct {
  1439.     uint8_t        link_type;
  1440. } __attribute__ ((packed)) evt_data_buffer_overflow;
  1441. #define EVT_DATA_BUFFER_OVERFLOW_SIZE 1
  1442.  
  1443. #define EVT_MAX_SLOTS_CHANGE        0x1B
  1444. typedef struct {
  1445.     uint16_t    handle;
  1446.     uint8_t        max_slots;
  1447. } __attribute__ ((packed)) evt_max_slots_change;
  1448. #define EVT_MAX_SLOTS_CHANGE_SIZE 3
  1449.  
  1450. #define EVT_READ_CLOCK_OFFSET_COMPLETE    0x1C
  1451. typedef struct {
  1452.     uint8_t        status;
  1453.     uint16_t    handle;
  1454.     uint16_t    clock_offset;
  1455. } __attribute__ ((packed)) evt_read_clock_offset_complete;
  1456. #define EVT_READ_CLOCK_OFFSET_COMPLETE_SIZE 5
  1457.  
  1458. #define EVT_CONN_PTYPE_CHANGED        0x1D
  1459. typedef struct {
  1460.     uint8_t        status;
  1461.     uint16_t    handle;
  1462.     uint16_t    ptype;
  1463. } __attribute__ ((packed)) evt_conn_ptype_changed;
  1464. #define EVT_CONN_PTYPE_CHANGED_SIZE 5
  1465.  
  1466. #define EVT_QOS_VIOLATION        0x1E
  1467. typedef struct {
  1468.     uint16_t    handle;
  1469. } __attribute__ ((packed)) evt_qos_violation;
  1470. #define EVT_QOS_VIOLATION_SIZE 2
  1471.  
  1472. #define EVT_PSCAN_REP_MODE_CHANGE    0x20
  1473. typedef struct {
  1474.     bdaddr_t    bdaddr;
  1475.     uint8_t        pscan_rep_mode;
  1476. } __attribute__ ((packed)) evt_pscan_rep_mode_change;
  1477. #define EVT_PSCAN_REP_MODE_CHANGE_SIZE 7
  1478.  
  1479. #define EVT_FLOW_SPEC_COMPLETE        0x21
  1480. typedef struct {
  1481.     uint8_t        status;
  1482.     uint16_t    handle;
  1483.     uint8_t        flags;
  1484.     uint8_t        direction;
  1485.     hci_qos        qos;
  1486. } __attribute__ ((packed)) evt_flow_spec_complete;
  1487. #define EVT_FLOW_SPEC_COMPLETE_SIZE (5 + HCI_QOS_CP_SIZE)
  1488.  
  1489. #define EVT_INQUIRY_RESULT_WITH_RSSI    0x22
  1490. typedef struct {
  1491.     bdaddr_t    bdaddr;
  1492.     uint8_t        pscan_rep_mode;
  1493.     uint8_t        pscan_period_mode;
  1494.     uint8_t        dev_class[3];
  1495.     uint16_t    clock_offset;
  1496.     int8_t        rssi;
  1497. } __attribute__ ((packed)) inquiry_info_with_rssi;
  1498. #define INQUIRY_INFO_WITH_RSSI_SIZE 14
  1499. typedef struct {
  1500.     bdaddr_t    bdaddr;
  1501.     uint8_t        pscan_rep_mode;
  1502.     uint8_t        pscan_period_mode;
  1503.     uint8_t        pscan_mode;
  1504.     uint8_t        dev_class[3];
  1505.     uint16_t    clock_offset;
  1506.     int8_t        rssi;
  1507. } __attribute__ ((packed)) inquiry_info_with_rssi_and_pscan_mode;
  1508. #define INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE 15
  1509.  
  1510. #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE    0x23
  1511. typedef struct {
  1512.     uint8_t        status;
  1513.     uint16_t    handle;
  1514.     uint8_t        page_num;
  1515.     uint8_t        max_page_num;
  1516.     uint8_t        features[8];
  1517. } __attribute__ ((packed)) evt_read_remote_ext_features_complete;
  1518. #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE 13
  1519.  
  1520. #define EVT_SYNC_CONN_COMPLETE        0x2C
  1521. typedef struct {
  1522.     uint8_t        status;
  1523.     uint16_t    handle;
  1524.     bdaddr_t    bdaddr;
  1525.     uint8_t        link_type;
  1526.     uint8_t        trans_interval;
  1527.     uint8_t        retrans_window;
  1528.     uint16_t    rx_pkt_len;
  1529.     uint16_t    tx_pkt_len;
  1530.     uint8_t        air_mode;
  1531. } __attribute__ ((packed)) evt_sync_conn_complete;
  1532. #define EVT_SYNC_CONN_COMPLETE_SIZE 17
  1533.  
  1534. #define EVT_SYNC_CONN_CHANGED        0x2D
  1535. typedef struct {
  1536.     uint8_t        status;
  1537.     uint16_t    handle;
  1538.     uint8_t        trans_interval;
  1539.     uint8_t        retrans_window;
  1540.     uint16_t    rx_pkt_len;
  1541.     uint16_t    tx_pkt_len;
  1542. } __attribute__ ((packed)) evt_sync_conn_changed;
  1543. #define EVT_SYNC_CONN_CHANGED_SIZE 9
  1544.  
  1545. #define EVT_SNIFF_SUBRATING        0x2E
  1546. typedef struct {
  1547.     uint8_t        status;
  1548.     uint16_t    handle;
  1549.     uint16_t    max_tx_latency;
  1550.     uint16_t    max_rx_latency;
  1551.     uint16_t    min_remote_timeout;
  1552.     uint16_t    min_local_timeout;
  1553. } __attribute__ ((packed)) evt_sniff_subrating;
  1554. #define EVT_SNIFF_SUBRATING_SIZE 11
  1555.  
  1556. #define EVT_EXTENDED_INQUIRY_RESULT    0x2F
  1557. typedef struct {
  1558.     bdaddr_t    bdaddr;
  1559.     uint8_t        pscan_rep_mode;
  1560.     uint8_t        pscan_period_mode;
  1561.     uint8_t        dev_class[3];
  1562.     uint16_t    clock_offset;
  1563.     int8_t        rssi;
  1564.     uint8_t        data[240];
  1565. } __attribute__ ((packed)) extended_inquiry_info;
  1566. #define EXTENDED_INQUIRY_INFO_SIZE 254
  1567.  
  1568. #define EVT_ENCRYPTION_KEY_REFRESH_COMPLETE    0x30
  1569. typedef struct {
  1570.     uint8_t        status;
  1571.     uint16_t    handle;
  1572. } __attribute__ ((packed)) evt_encryption_key_refresh_complete;
  1573. #define EVT_ENCRYPTION_KEY_REFRESH_COMPLETE_SIZE 3
  1574.  
  1575. #define EVT_IO_CAPABILITY_REQUEST    0x31
  1576. typedef struct {
  1577.     bdaddr_t    bdaddr;
  1578. } __attribute__ ((packed)) evt_io_capability_request;
  1579. #define EVT_IO_CAPABILITY_REQUEST_SIZE 6
  1580.  
  1581. #define EVT_IO_CAPABILITY_RESPONSE    0x32
  1582. typedef struct {
  1583.     bdaddr_t    bdaddr;
  1584.     uint8_t        capability;
  1585.     uint8_t        oob_data;
  1586.     uint8_t        authentication;
  1587. } __attribute__ ((packed)) evt_io_capability_response;
  1588. #define EVT_IO_CAPABILITY_RESPONSE_SIZE 9
  1589.  
  1590. #define EVT_USER_CONFIRM_REQUEST    0x33
  1591. typedef struct {
  1592.     bdaddr_t    bdaddr;
  1593.     uint32_t    passkey;
  1594. } __attribute__ ((packed)) evt_user_confirm_request;
  1595. #define EVT_USER_CONFIRM_REQUEST_SIZE 10
  1596.  
  1597. #define EVT_USER_PASSKEY_REQUEST    0x34
  1598. typedef struct {
  1599.     bdaddr_t    bdaddr;
  1600. } __attribute__ ((packed)) evt_user_passkey_request;
  1601. #define EVT_USER_PASSKEY_REQUEST_SIZE 6
  1602.  
  1603. #define EVT_REMOTE_OOB_DATA_REQUEST    0x35
  1604. typedef struct {
  1605.     bdaddr_t    bdaddr;
  1606. } __attribute__ ((packed)) evt_remote_oob_data_request;
  1607. #define EVT_REMOTE_OOB_DATA_REQUEST_SIZE 6
  1608.  
  1609. #define EVT_SIMPLE_PAIRING_COMPLETE    0x36
  1610. typedef struct {
  1611.     uint8_t        status;
  1612.     bdaddr_t    bdaddr;
  1613. } __attribute__ ((packed)) evt_simple_pairing_complete;
  1614. #define EVT_SIMPLE_PAIRING_COMPLETE_SIZE 7
  1615.  
  1616. #define EVT_LINK_SUPERVISION_TIMEOUT_CHANGED    0x38
  1617. typedef struct {
  1618.     uint16_t    handle;
  1619.     uint16_t    timeout;
  1620. } __attribute__ ((packed)) evt_link_supervision_timeout_changed;
  1621. #define EVT_LINK_SUPERVISION_TIMEOUT_CHANGED_SIZE 4
  1622.  
  1623. #define EVT_ENHANCED_FLUSH_COMPLETE    0x39
  1624. typedef struct {
  1625.     uint16_t    handle;
  1626. } __attribute__ ((packed)) evt_enhanced_flush_complete;
  1627. #define EVT_ENHANCED_FLUSH_COMPLETE_SIZE 2
  1628.  
  1629. #define EVT_USER_PASSKEY_NOTIFY        0x3B
  1630. typedef struct {
  1631.     bdaddr_t    bdaddr;
  1632.     uint32_t    passkey;
  1633. } __attribute__ ((packed)) evt_user_passkey_notify;
  1634. #define EVT_USER_PASSKEY_NOTIFY_SIZE 10
  1635.  
  1636. #define EVT_KEYPRESS_NOTIFY        0x3C
  1637. typedef struct {
  1638.     bdaddr_t    bdaddr;
  1639.     uint8_t        type;
  1640. } __attribute__ ((packed)) evt_keypress_notify;
  1641. #define EVT_KEYPRESS_NOTIFY_SIZE 7
  1642.  
  1643. #define EVT_REMOTE_HOST_FEATURES_NOTIFY    0x3D
  1644. typedef struct {
  1645.     bdaddr_t    bdaddr;
  1646.     uint8_t        features[8];
  1647. } __attribute__ ((packed)) evt_remote_host_features_notify;
  1648. #define EVT_REMOTE_HOST_FEATURES_NOTIFY_SIZE 14
  1649.  
  1650. #define EVT_TESTING            0xFE
  1651.  
  1652. #define EVT_VENDOR            0xFF
  1653.  
  1654. /* Internal events generated by BlueZ stack */
  1655. #define EVT_STACK_INTERNAL        0xFD
  1656. typedef struct {
  1657.     uint16_t    type;
  1658.     uint8_t        data[0];
  1659. } __attribute__ ((packed)) evt_stack_internal;
  1660. #define EVT_STACK_INTERNAL_SIZE 2
  1661.  
  1662. #define EVT_SI_DEVICE    0x01
  1663. typedef struct {
  1664.     uint16_t    event;
  1665.     uint16_t    dev_id;
  1666. } __attribute__ ((packed)) evt_si_device;
  1667. #define EVT_SI_DEVICE_SIZE 4
  1668.  
  1669. #define EVT_SI_SECURITY    0x02
  1670. typedef struct {
  1671.     uint16_t    event;
  1672.     uint16_t    proto;
  1673.     uint16_t    subproto;
  1674.     uint8_t        incoming;
  1675. } __attribute__ ((packed)) evt_si_security;
  1676.  
  1677. /* --------  HCI Packet structures  -------- */
  1678. #define HCI_TYPE_LEN    1
  1679.  
  1680. typedef struct {
  1681.     uint16_t    opcode;        /* OCF & OGF */
  1682.     uint8_t        plen;
  1683. } __attribute__ ((packed))    hci_command_hdr;
  1684. #define HCI_COMMAND_HDR_SIZE     3
  1685.  
  1686. typedef struct {
  1687.     uint8_t        evt;
  1688.     uint8_t        plen;
  1689. } __attribute__ ((packed))    hci_event_hdr;
  1690. #define HCI_EVENT_HDR_SIZE     2
  1691.  
  1692. typedef struct {
  1693.     uint16_t    handle;        /* Handle & Flags(PB, BC) */
  1694.     uint16_t    dlen;
  1695. } __attribute__ ((packed))    hci_acl_hdr;
  1696. #define HCI_ACL_HDR_SIZE     4
  1697.  
  1698. typedef struct {
  1699.     uint16_t    handle;
  1700.     uint8_t        dlen;
  1701. } __attribute__ ((packed))    hci_sco_hdr;
  1702. #define HCI_SCO_HDR_SIZE     3
  1703.  
  1704. typedef struct {
  1705.     uint16_t    device;
  1706.     uint16_t    type;
  1707.     uint16_t    plen;
  1708. } __attribute__ ((packed))    hci_msg_hdr;
  1709. #define HCI_MSG_HDR_SIZE    6
  1710.  
  1711. /* Command opcode pack/unpack */
  1712. #define cmd_opcode_pack(ogf, ocf)    (uint16_t)((ocf & 0x03ff)|(ogf << 10))
  1713. #define cmd_opcode_ogf(op)        (op >> 10)
  1714. #define cmd_opcode_ocf(op)        (op & 0x03ff)
  1715.  
  1716. /* ACL handle and flags pack/unpack */
  1717. #define acl_handle_pack(h, f)    (uint16_t)((h & 0x0fff)|(f << 12))
  1718. #define acl_handle(h)        (h & 0x0fff)
  1719. #define acl_flags(h)        (h >> 12)
  1720.  
  1721. #endif /* _NO_HCI_DEFS */
  1722.  
  1723. /* HCI Socket options */
  1724. #define HCI_DATA_DIR    1
  1725. #define HCI_FILTER    2
  1726. #define HCI_TIME_STAMP    3
  1727.  
  1728. /* HCI CMSG flags */
  1729. #define HCI_CMSG_DIR    0x0001
  1730. #define HCI_CMSG_TSTAMP    0x0002
  1731.  
  1732. struct sockaddr_hci {
  1733.     sa_family_t    hci_family;
  1734.     unsigned short    hci_dev;
  1735. };
  1736. #define HCI_DEV_NONE    0xffff
  1737.  
  1738. struct hci_filter {
  1739.     uint32_t type_mask;
  1740.     uint32_t event_mask[2];
  1741.     uint16_t opcode;
  1742. };
  1743.  
  1744. #define HCI_FLT_TYPE_BITS    31
  1745. #define HCI_FLT_EVENT_BITS    63
  1746. #define HCI_FLT_OGF_BITS    63
  1747. #define HCI_FLT_OCF_BITS    127
  1748.  
  1749. /* Ioctl requests structures */
  1750. struct hci_dev_stats {
  1751.     uint32_t err_rx;
  1752.     uint32_t err_tx;
  1753.     uint32_t cmd_tx;
  1754.     uint32_t evt_rx;
  1755.     uint32_t acl_tx;
  1756.     uint32_t acl_rx;
  1757.     uint32_t sco_tx;
  1758.     uint32_t sco_rx;
  1759.     uint32_t byte_rx;
  1760.     uint32_t byte_tx;
  1761. };
  1762.  
  1763. struct hci_dev_info {
  1764.     uint16_t dev_id;
  1765.     char     name[8];
  1766.  
  1767.     bdaddr_t bdaddr;
  1768.  
  1769.     uint32_t flags;
  1770.     uint8_t  type;
  1771.  
  1772.     uint8_t  features[8];
  1773.  
  1774.     uint32_t pkt_type;
  1775.     uint32_t link_policy;
  1776.     uint32_t link_mode;
  1777.  
  1778.     uint16_t acl_mtu;
  1779.     uint16_t acl_pkts;
  1780.     uint16_t sco_mtu;
  1781.     uint16_t sco_pkts;
  1782.  
  1783.     struct   hci_dev_stats stat;
  1784. };
  1785.  
  1786. struct hci_conn_info {
  1787.     uint16_t handle;
  1788.     bdaddr_t bdaddr;
  1789.     uint8_t  type;
  1790.     uint8_t     out;
  1791.     uint16_t state;
  1792.     uint32_t link_mode;
  1793. };
  1794.  
  1795. struct hci_dev_req {
  1796.     uint16_t dev_id;
  1797.     uint32_t dev_opt;
  1798. };
  1799.  
  1800. struct hci_dev_list_req {
  1801.     uint16_t dev_num;
  1802.     struct hci_dev_req dev_req[0];    /* hci_dev_req structures */
  1803. };
  1804.  
  1805. struct hci_conn_list_req {
  1806.     uint16_t dev_id;
  1807.     uint16_t conn_num;
  1808.     struct hci_conn_info conn_info[0];
  1809. };
  1810.  
  1811. struct hci_conn_info_req {
  1812.     bdaddr_t bdaddr;
  1813.     uint8_t  type;
  1814.     struct hci_conn_info conn_info[0];
  1815. };
  1816.  
  1817. struct hci_auth_info_req {
  1818.     bdaddr_t bdaddr;
  1819.     uint8_t  type;
  1820. };
  1821.  
  1822. struct hci_inquiry_req {
  1823.     uint16_t dev_id;
  1824.     uint16_t flags;
  1825.     uint8_t  lap[3];
  1826.     uint8_t  length;
  1827.     uint8_t  num_rsp;
  1828. };
  1829. #define IREQ_CACHE_FLUSH 0x0001
  1830.  
  1831. struct hci_remotename_req {
  1832.     uint16_t dev_id;
  1833.     uint16_t flags;
  1834.     bdaddr_t bdaddr;
  1835.     uint8_t  name[248];
  1836. };
  1837.  
  1838. #ifdef __cplusplus
  1839. }
  1840. #endif
  1841.  
  1842. #endif /* __HCI_H */
  1843.